// eslint-disable-next-line @typescript-eslint/triple-slash-reference
/// <reference  path="../../support/index.d.ts" />
import '../../support/commands'

// Напишите следующий тест-кейс и успешно выполните его: (2 балла)
//   + Зайти на форму авторизации.
//   + Авторизоваться.
//   + Поставить лайк третьему и шестому продукту.
//   + Перейти на страницу продуктов.
//   + Проверить наличие лайков.
//   + Снять лайки.
//   + Проверить снятие лайков.

describe('Тестируем авторизацию, лайки 3-го и 6-го продукта, снятие лайков', () => {
	beforeEach(() => {
		cy.viewport(1480, 920)
		cy.visit('/signin')
		cy.login()
		cy.url().should('be.equal', 'http://localhost:3000/')
		cy.get('div > a:nth-child(2)').contains('Каталог').click()
	})

	it('Ставим лайки 3 и 6 продукту', () => {
		function likeFn(products: number[], like: boolean) {
			products.forEach((product) => {
				cy.get(
					`[data-testid="PRODUCT_CARDS"] > div:nth-child(${product}) > div > div:last-child`
				).then((btn) => {
					if (like) {
						// если товар не лайкнут, то лайкаем
						if (btn.html().includes('data-testid="FavoriteBorderIcon"'))
							cy.wrap(btn).click()
					} else {
						// если товар лайкнут, то дизлайкаем
						if (btn.html().includes('data-testid="FavoriteIcon"'))
							cy.wrap(btn).click()
					}
				})
			})
		}

		// лайкаем 3-й и 6-й продукт
		const products = [3, 6]
		likeFn(products, true)
	})

	it('Периход на страницу продукта 3 и удаляем лайки', () => {
		// Переходим на страницу продукта
		cy.get('[data-testid="PRODUCT_CARDS"] > div:nth-child(3) > div').click()
		cy.get('div > button > p').contains('Удалить из избранного').click()
		cy.get('div > button > p')
			.contains('Удалить из избранного')
			.should('not.exist')
	})

	it('Периход на страницу продукта 6 и удаляем лайки', () => {
		// Переходим на страницу продукта
		cy.get('[data-testid="PRODUCT_CARDS"] > div:nth-child(6) > div').click()
		cy.get('div > button > p').contains('Удалить из избранного').click()
		cy.get('div > button > p')
			.contains('Удалить из избранного')
			.should('not.exist')
	})

	it('Проверить снятие лайков продукта 3', () => {
		// Переходим на страницу продукта
		cy.get('[data-testid="PRODUCT_CARDS"] > div:nth-child(3) > div').click()
		cy.get('div > button > p')
			.contains('Удалить из избранного')
			.should('not.exist')
	})
	it('Проверить снятие лайков продукта 3', () => {
		// Переходим на страницу продукта
		cy.get('[data-testid="PRODUCT_CARDS"] > div:nth-child(6) > div').click()
		cy.get('div > button > p')
			.contains('Удалить из избранного')
			.should('not.exist')
	})
})
